#include <cstdio>
#include <cstring>
#include <cstdlib>

const int MAXN=50005;

bool can[MAXN];
int sum[MAXN];
int que[MAXN];
int N, W;

bool check(int lim)
{
	int head=0, tail=0;
	memset(can, 0, sizeof(can));
	que[tail++]=0; can[0]=true;
	for (int i=1; i<=N; i++)
	{
		que[tail++]=i;
		while (head<tail&&((W-(sum[i]-sum[que[head]])<tail-head-2||!can[que[head]]))) head++;
		if (head<tail&&((W-(sum[i]-sum[que[head]])<=lim*(tail-head-2))))
			can[i]|=can[que[head]];
	}
	for (int i=N; i>=0; i--)
		if (sum[N]-sum[i]+(N-i-1)<=W&&can[i]) return true;
	return false;
}

int main()
{
	while (scanf("%d%d", &W, &N)==2&&W)
	{
		memset(sum, 0, sizeof(sum));
		for (int i=1; i<=N; i++) scanf("%d", &sum[i]), sum[i]+=sum[i-1];
		int left=1, right=W;
		while (left<right)
		{
			int mid=(left+right)>>1;
			if (check(mid)) right=mid;
			else left=mid+1;
		}
		printf("%d\n", left);
	}
	return 0;
}
